﻿using System;
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;

namespace Core
{

    [CreateAssetMenu(menuName = "Mini/Sys/Asset/Anim4DirData")]
    public class Anim4DirData : ScriptableObject
    {
        [Serializable]
        public class Anim
        {
            [HorizontalGroup("row0",Width =0.3f)]
            public EDir4 Dir;
            [HorizontalGroup("row0")]
            public Sprite[] Sprites;
        }

        public string AnimName;
        public Anim[] animPerDir;

        private readonly Dictionary<EDir4, Anim> dict = new();

        public Anim GetAnim(EDir4 dir)
        {
            if (dict.ContainsKey(dir)) return dict[dir];

            var anim = FindByDir(dir);

            if (anim != null)
            {
                dict[dir] = anim;
                return anim;
            }

            switch (dir)
            {
                case EDir4.Up:
                    anim = FindByDir(EDir4.Down);
                    break;
                case EDir4.Down:
                    anim = FindByDir(EDir4.Up);
                    break;
                case EDir4.Left:
                    anim = FindByDir(EDir4.Right);
                    break;
                case EDir4.Right:
                    anim = FindByDir(EDir4.Left);
                    break;
            }

            if (anim != null)
            {
                dict[dir] = anim;
                return anim;
            }

            return null;
        }

        private Anim FindByDir(EDir4 dir)
        {
            for (int i = 0; i < animPerDir.Length; i++)
            {
                if (animPerDir[i].Dir == dir)
                {
                    return animPerDir[i];
                }
            }

            return null;
        }
    }
}
